Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / scripts / docs / publish-to-gh-pages.sh

Displaying Raw • Download

scripts/docs/publish-to-gh-pages.sh bd2863243bab6eb213401d949839a2bc74dde7e2 (bd286324) Text, 3.16 KB

T8b949e#!/usr/bin/env bash
T8b949e# Publish one or more docs channels to the persistent gh-pages branch.
T8b949e#
T8b949e# Unlike the artifact-based deploy-pages model (which replaces the whole site
T8b949e# on every deploy), this overlays ONLY the channels being rebuilt, so
T8b949e# previously published /vX.Y.Z/ folders survive main-branch snapshot deploys
T8b949e# and vice versa.
T8b949e#
T8b949e# Usage: publish-to-gh-pages.sh <staging-dir> <channel> [<channel>...]
T8b949e#
T8b949e# <staging-dir> directory containing one subdirectory per channel:
T8b949e# staging/root/ -> site root (latest release docs)
T8b949e# staging/main/ -> /main/ (snapshot of main branch)
T8b949e# staging/api/ -> /api/ (Dokka)
T8b949e# staging/vX.Y.Z/ -> /vX.Y.Z/ (versioned release docs)
T8b949e# <channel> subdirectory names to publish (root|main|api|vX.Y.Z)
T8b949e#
T8b949e# Must run from inside the repo checkout (uses a git worktree so the
T8b949e# credentials persisted by actions/checkout apply to the push).
T8b949e# Requires: rsync, python3.

Tffa657set -euo pipefail

Te6edf3STAGINGTff7b72=Tff7b72$(Tffa657cd Ta5d6ff"Te6edf3$1Ta5d6ff" Tff7b72&& Tffa657pwdTff7b72)
Tffa657shift
Te6edf3CHANNELSTff7b72=Tff7b72(Ta5d6ff"Te6edf3$@Ta5d6ff"Tff7b72)

Tff7b72if Tff7b72[ Tffd700${#Te6edf3CHANNELSTb4b4b4[@]Tffd700} -eq T79c0ff0 Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"No channels given" >Tb4b4b4&T79c0ff2
Tffa657exit T79c0ff1
Tff7b72fi

Te6edf3SITE_DIRTff7b72=Tff7b72$(mktemp -dTff7b72)
cleanupTff7b72(Tff7b72) Tff7b72{
git worktree remove --force Ta5d6ff"Te6edf3$SITE_DIRTa5d6ff" T79c0ff2> /dev/null Tff7b72|| rm -rf Ta5d6ff"Te6edf3$SITE_DIRTa5d6ff"
Tff7b72}
Tffa657trap cleanup EXIT

T8b949e# Check out existing gh-pages content, or start an orphan history.
rmdir Ta5d6ff"Te6edf3$SITE_DIRTa5d6ff"
Tff7b72if git fetch origin gh-pages T79c0ff2> /dev/nullTb4b4b4; Tff7b72then
git worktree add -B gh-pages Ta5d6ff"Te6edf3$SITE_DIRTa5d6ff" FETCH_HEAD
Tff7b72else
git worktree add --detach Ta5d6ff"Te6edf3$SITE_DIRTa5d6ff"
git -C Ta5d6ff"Te6edf3$SITE_DIRTa5d6ff" checkout --orphan gh-pages
git -C Ta5d6ff"Te6edf3$SITE_DIRTa5d6ff" rm -rf --quiet . Tff7b72|| Tffa657true
Tff7b72fi

Tff7b72for channel Tff7b72in Ta5d6ff"Tffd700${Te6edf3CHANNELSTb4b4b4[@]Tffd700}Ta5d6ff"Tb4b4b4; Tff7b72do
Te6edf3srcTff7b72=Ta5d6ff"Te6edf3$STAGINGTa5d6ff/Te6edf3$channelTa5d6ff"
Tff7b72if Tff7b72[ ! -d Ta5d6ff"Te6edf3$srcTa5d6ff" Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ffMissing staging dir for channel 'Te6edf3$channelTa5d6ff': Te6edf3$srcTa5d6ff" >Tb4b4b4&T79c0ff2
Tffa657exit T79c0ff1
Tff7b72fi
Tff7b72if Tff7b72[ Ta5d6ff"Te6edf3$channelTa5d6ff" Tff7b72= Ta5d6ff"root" Tff7b72]Tb4b4b4; Tff7b72then
T8b949e# Replace root files but preserve the other channels living beside them.
T8b949e# --checksum: freshly built files and the just-checked-out worktree can
T8b949e# share size + same-second mtime, which defeats rsync's quick check.
rsync -a --checksum --delete Tffea00\
--excludeTff7b72=Ta5d6ff'.git' Tffea00\
--excludeTff7b72=Ta5d6ff'main/' Tffea00\
--excludeTff7b72=Ta5d6ff'api/' Tffea00\
--excludeTff7b72=Ta5d6ff'v[0-9]*/' Tffea00\
--excludeTff7b72=Ta5d6ff'versions.json' Tffea00\
Ta5d6ff"Te6edf3$srcTa5d6ff/Ta5d6ff" Ta5d6ff"Te6edf3$SITE_DIRTa5d6ff/Ta5d6ff"
Tff7b72else
rsync -a --checksum --delete --excludeTff7b72=Ta5d6ff'.git' Ta5d6ff"Te6edf3$srcTa5d6ff/Ta5d6ff" Ta5d6ff"Te6edf3$SITE_DIRTa5d6ff/Te6edf3$channelTa5d6ff/Ta5d6ff"
Tff7b72fi
Tffa657echo Ta5d6ff"Ta5d6ffPublished channel: Te6edf3$channelTa5d6ff"
Tff7b72done

T8b949e# Regenerate the version manifest consumed by the site's version switcher, and
T8b949e# (re)write the root placeholder when no production release owns the root yet.
T8b949e# Shared with post-release-cleanup.yml so the two can never derive it differently.
python3 Ta5d6ff"Tff7b72$(dirname Ta5d6ff"Te6edf3$0Ta5d6ff"Tff7b72)Ta5d6ff/regenerate-versions.pyTa5d6ff" Ta5d6ff"Te6edf3$SITE_DIRTa5d6ff"

T8b949e# Pages must serve this branch as-is; the site is already built.
touch Ta5d6ff"Te6edf3$SITE_DIRTa5d6ff/.nojekyllTa5d6ff"

Tffa657cd Ta5d6ff"Te6edf3$SITE_DIRTa5d6ff"
git add -A
Tff7b72if git diff --cached --quietTb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"No changes to publish"
Tffa657exit T79c0ff0
Tff7b72fi
git -c user.nameTff7b72=Ta5d6ff'github-actions[bot]' Tffea00\
-c user.emailTff7b72=Ta5d6ff'41898282+github-actions[bot]@users.noreply.github.com' Tffea00\
commit -m Ta5d6ff"Ta5d6ffdocs: publish channels: Tffd700${Te6edf3CHANNELSTb4b4b4[*]Tffd700}Ta5d6ff"
git push origin HEAD:gh-pages

Served by rngit 1.5.0 - Generated in 0.07s